package cn.memset.code.lambda;

import java.util.Arrays;
import java.util.function.IntUnaryOperator;

public class ClosureExample {
    public static void main(String[] args) {
        // 平方
        IntUnaryOperator square = getPowOperator(2);

        // 立方
        IntUnaryOperator cube = getPowOperator(3);

        // 四次方
        IntUnaryOperator fourthPower = getPowOperator(4);

        // 5的平方
        System.out.println(square.applyAsInt(5));
        // 5的立方
        System.out.println(cube.applyAsInt(5));
        // 5的四次方
        System.out.println(fourthPower.applyAsInt(5));
    }

    public static IntUnaryOperator getPowOperator(int exp) {
        // 假定 exp 是一个int数组：exp = new int[1];
        return base -> {
            // 变量 exp 是 getPowOperator 的参数，属于lambda 表达式定义时的自由变量，
            // 它的生命周期会延长到和返回的 lambda 表达式一样长。
            return (int) Math.pow(base, exp);
        };
    }
}
